package com.demo.backtemplate.controllers;

import com.demo.backtemplate.models.dto.ProductDTO;
import com.demo.backtemplate.service.ProductService;
import com.xlf.utility.BaseResponse;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * 商品控制器
 */
@Slf4j
@RestController
@RequestMapping("/api/products")
@RequiredArgsConstructor
public class ProductController {
    private final ProductService productService;

    /**
     * 获取商品列表
     *
     * @param page 页码
     * @param size 每页大小
     * @return 商品列表
     */
    @GetMapping("/list")
    public ResponseEntity<BaseResponse<List<ProductDTO>>> getProductList(
            @RequestParam(defaultValue = "1") Integer page,
            @RequestParam(defaultValue = "10") Integer size) {
        return productService.getProductList(page, size);
    }

    /**
     * 获取商品详情
     *
     * @param id 商品ID
     * @return 商品详情
     */
    @GetMapping("/{id}")
    public ResponseEntity<BaseResponse<ProductDTO>> getProductById(@PathVariable Long id) {
        return productService.getProductById(id);
    }

    /**
     * 创建商品
     *
     * @param productDTO 商品信息
     * @return 创建结果
     */
    @PostMapping
    public ResponseEntity<BaseResponse<Void>> createProduct(@RequestBody ProductDTO productDTO) {
        return productService.createProduct(productDTO);
    }

    /**
     * 更新商品
     *
     * @param id 商品ID
     * @param productDTO 商品信息
     * @return 更新结果
     */
    @PutMapping("/{id}")
    public ResponseEntity<BaseResponse<Void>> updateProduct(
            @PathVariable Long id,
            @RequestBody ProductDTO productDTO) {
        productDTO.setId(id);
        return productService.updateProduct(productDTO);
    }

    /**
     * 删除商品
     *
     * @param id 商品ID
     * @return 删除结果
     */
    @DeleteMapping("/{id}")
    public ResponseEntity<BaseResponse<Void>> deleteProduct(@PathVariable Long id) {
        return productService.deleteProduct(id);
    }

    /**
     * 更新商品状态
     *
     * @param id 商品ID
     * @param status 状态
     * @return 更新结果
     */
    @PutMapping("/{id}/status")
    public ResponseEntity<BaseResponse<Void>> updateProductStatus(
            @PathVariable Long id,
            @RequestParam Integer status) {
        return productService.updateProductStatus(id, status);
    }
} 